const File = require('../models/File')
const fs = require('fs')
const path = require('path')

// 清理超过7天未关联的文件
async function cleanOrphanFiles() {
  try {
    const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)

    // 查找未关联且超过7天的文件（包括path无效的记录）
    const orphanFiles = await File.find({
      $and: [
        { referenced: { $ne: true } },
        { createdAt: { $lt: sevenDaysAgo } },
        {
          $or: [
            { path: { $exists: false } }, // path字段不存在
            { path: null }, // path为null
            { path: '' } // path为空字符串
          ]
        }
      ]
    })

    // 删除文件记录和实际文件
    for (const file of orphanFiles) {
      // 只有path存在且有效时才尝试删除实际文件
      if (file.path && file.path.trim() !== '') {
        const filePath = path.join(__dirname, '..', file.path)
        if (fs.existsSync(filePath)) {
          fs.unlinkSync(filePath)
        }
      }
      await file.deleteOne() // 无论如何都删除数据库记录
    }

    console.log(`清理了 ${orphanFiles.length} 个无效文件记录`)
  } catch (err) {
    console.error('文件清理失败:', err)
  }
}

module.exports = cleanOrphanFiles
